"""
Python 推导式是一种独特的数据处理方式，可以从一个数据序列构建另一个新的数据序列的结构体。
Python 支持各种数据结构的推导式：
    列表(list)推导式
    字典(dict)推导式
    集合(set)推导式
    元组(tuple)推导式
"""

print("==========List列表推导式==========")
"""
【语法】
    [表达式 for 变量 in 列表] 
    [out_exp_res for out_exp in input_list]
    或者 
    [表达式 for 变量 in 列表 if 条件]
    [out_exp_res for out_exp in input_list if condi
"""
# 1、案例：过滤掉长度大于3的字符串列表，并将结果转换成大写字母
names = ['Tom', 'Mary', 'Jd']
new_names = [name.upper() for name in names if len(name) > 3]  # name.upper()：为将字母转换为大写
print(new_names)

# 2、案例：计算 30 以内可以被 3 整除的整数
num_int = [i for i in range(30) if i % 3 == 0]
print(num_int)

print("==========Dict字典推导式==========")
"""
【语法】
    { key_expr: value_expr for value in collection }
    或
    { key_expr: value_expr for value in collection if condition }
"""
# 3、案例：将列表中各字符串值为键，各字符串的长度为值，组成键值对
d_demo = ['Google', 'JD', 'Taobao']
dict_new = {idx: len(idx) for idx in d_demo}
print(dict_new)

# 4、案例：提供三个数字，以三个数字为键，三个数字的平方为值来创建字典
d_demo_2 = [2, 4, 6]
dict_new_2 = {idx: idx ** 2 for idx in d_demo_2}
print(dict_new_2)

print("==========Set集合推导式==========")
"""
【语法】
    { expression for item in Sequence }
    或
    { expression for item in Sequence if conditional }
"""
# 5、案例：计算数字 1,2,3 的平方数
set1 = {1, 2, 3}
set_1 = {i ** 2 for i in set1}
print(set_1)

# 6、案例：判断不是 abc 的字母并输出
str = 'abracadabra'
set_2 = {s for s in str if s not in 'abc'}
print(set_2)

print("==========Tuple元组推导式==========")
"""
【语法】
    (expression for item in Sequence )
    或
    (expression for item in Sequence if conditional )
    元组推导式和列表推导式的用法也完全相同，只是元组推导式是用 () 圆括号将各部分括起来，而列表推导式用的是中括号 []，另外元组推导式返回的结果是一个生成器对象。
"""
# 7、案例：生成一个包含数字 1~9 的元组
tuple_1 = (i for i in range(1, 9))
print(tuple_1)  # 返回的是一个生成器对象
print(tuple(tuple_1))  # 使用 tuple() 函数，可以直接将生成器对象转换成元组
